package com.dd.ms.auth.mapper;

import com.dd.ms.auth.pojo.DO.PermissionDO;
import com.dd.ms.auth.pojo.dto.RolePermissionDTO;
import com.dd.ms.auth.pojo.req.RolePersBatchAddReq;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.PropertyValues;

import java.util.List;
import java.util.Map;

/**
 * @Author liuxianmeng
 * @CreateTime 2025/7/9 12:05
 * @Description 角色 & 权限 关联操作
 */
@Mapper
public interface RolePermissionRelMapper {

    /**
     * 添加角色权限关联
     *
     * @param params 参数应该包含角色和权限的id
     */
    void addRolePermissionRel(@Param("params") Map<String, Object> params);

    /**
     * 批量添加角色权限关联
     * @param req 参数列表（每个Map包含roleId和perId）
     */
    //void batchAddRolePermissionRel(@Param("paramsList") List<Map<String, Object>> paramsList);
    void batchAddRolePermissionRel(@Param("req") RolePersBatchAddReq req);

    /**
     * 移除角色权限关联
     *
     * @param params 必须包含roleId和perId
     */
    void removeRolePerRel(@Param("params") Map<String, Object> params);

    /**
     * 清空角色所有权限
     *
     * @param roleId 角色ID
     */
    void clearRolePermissions(@Param("roleId") Long roleId);

    /**
     * 查询角色拥有的权限ID列表
     *
     * @param roleId 角色ID
     * @return 权限ID集合
     */
    List<Long> getPermissionIdsByRoleId(@Param("roleId") Long roleId);

    /**
     * 判断角色是否拥有指定权限
     *
     * @param roleId 角色ID
     * @param perId 权限ID
     * @return 存在返回true
     */
    Boolean hasPermission(@Param("roleId") Long roleId, @Param("perId") Long perId);

    List<RolePermissionDTO> getPermissionsByRoleIds(@Param("roleIds") List<Long> roleIds);
}
